from django.shortcuts import render
from django import http
from django.views import View
# Create your views here.


def register(request):
    """
    用户注册函数视图
    :param request: 请求对象，包含了请求报文信息
    :return: 响应对象，用于构造响应报文，并响应给用户
    """
    return http.HttpResponse("第一个函数视图")

# 当视图对应的同一个路径，提供了多种不同HTTP请求方式的支持时，便需要在一个函数中编写不同的业务逻辑，代码可读性与复用性都很差
def register2(request):
    """
    用户向地址http://127.0.0.1:8000/users/register/发送GET请求，用来获取注册页面。
    用户向地址http://127.0.0.1:8000/users/register/发送POST请求，用来实现注册逻辑。
    :param request:
    :return:响应对象
    """
    if request.method == 'GET':
        return http.HttpResponse("这是注册页面")
    else:
        return http.HttpResponse("这是注册逻辑")


class RegisterView(View):

    def get(self, request):
        return http.HttpResponse("这是注册页面")

    def post(self, request):
        return http.HttpResponse("这是注册逻辑")


class ListModelMixin(object):
    """
    自定义的扩展类，扩展一个输出的功能
    python中定义扩展类，一般以Mixin结尾，约定俗成
    """
    def list(self):
        my_list = [1, 2, 3]
        print(my_list)


# 继承拓展类，则可以使用拓展类的方法
class RegisterView2(View, ListModelMixin):

    def get(self,request):
        self.list()
        return http.HttpResponse("拓展类测试")


# 测试re_path()和url()正则表达式没有写全而导致的路由屏蔽
class SayView(View):

    def get(self, request):
        return http.HttpResponse("say")


# 测试re_path()和url()正则表达式没有写全而导致的路由屏蔽
class SayHelloView(View):

    def get(self, request):
        return http.HttpResponse("say hello")